■ 文字コード
・ アスキーコード、JIS標準文字コード(JIS X 0201)他
制御コード
・ PCからの送信文字
■ アスキーコード
・ 文字コードはアスキー(ASCII)コードが基本です。 もともとは、ANSI(米国規格協会) が制定した文字コードで American Standard
Code for Information Interchangeの頭文字をとったものです。ANSIコードと呼ばれることもあります。 7ビット(0~127)の文字
コードセットの文字コードセットで、今ではISO 646にもなっています。
■ ANKコード(JIS X 0201)
・ このアスキーコードの上位 ビット A0~DFの部分にカタカナ等を追加して(■部分)、また\(バックスラッシュ) を¥(円記号) 、
~(チルダ)を ¯(オーバーバー)に変更(■部分)して 規格化した8ビットのコードセットががJIS半角英数カナ文字コード(JIS X
0201) です。通称、ANK(Alphabet Numeric Kana: アンク)コードと呼ばれます。
(注) 半角のバックスラッシュ \ はフォントをArial にして\をキーインすると表示することができます。
・日本のJIS X 0201のようにASCIIコードの無定義MSBを”1”にした8ビットの半角文字コードセットが世界各国にありISOで規格化されて
います。~
(例) ISO 8859-1 (西欧文字追加)、ISO8859-5(ロシア語用キリル文字追加)、ISO 8859-6(アラビア文字追加)他
< ASCIIコード vs ANKコード比較 16進数表示 > | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ASCIIコード (ISO 646) |
|
ANKコード (JIS X 0201) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
・ 制御コード
下記のコードは制御コードと呼ばれ、データ通信で機器の制御やデータの制御などにつかわれます。 C、C++
言語のプログラムのなかでコピーしてつかえるようにプリプロセッサの形で書いてあります。
#define NULL 0x00 //ヌル //エスケープ文字: \0
#define SOH 0x01 //Start of Heading ヘッダー開始
#define STX 0x02 //Start of Text テキスト開始
#define ETX 0x03 //End of Text テキスト終了
#define EOT 0x04 //End Of Transmission 転送終了
#define ENQ 0x05 //ENQuiry 問い合せ、エンク
#define ACK 0x06 //Acknowledge 肯定応答 アック
#define BEL 0x07 //Bell ベル //エスケープ文字: \a
#define BS 0x08 //Back Space バックスペース //エスケープ文字: \b
#define HT 0x09 //Horizontal Tabulation 水平タブ //エスケープ文字: \t
#define LF 0x0a //Line Feed 改行 //エスケープ文字: \n
#define VT 0x0b //Vertical Tabulation 垂直タブ //エスケープ文字: \v
#define FF 0x0c //Form Feed 改ページ //エスケープ文字: \f
#define CR 0x0d //Carriage Return 復帰 //エスケープ文字: \r
#define SO 0x0e //Shift Out シフトアウト
#define SI 0x0f //Shift In シフトイン
#define DLE 0x10 //Data Link Escape 伝送制御拡張
#define DC1 0x11 //Device Control 1 装置制御1
#define DC2 0x12 //Device Control 2 装置制御2
#define DC3 0x13 //Device Control 2 装置制御3
#define DC4 0x14 //Device Control 4 装置制御4
#define NAK 0x15 //Negative Acknowledge 否定応答 ナック
#define SYN 0x16 //Synchronous idle 同期信号
#define ETB 0x17 //End of Transmission Block 転送ブロック終了
#define CAN 0x18 //Cancel 取消 キャンセル
#define EM 0x19 //End of Medium 媒体終端
//#define SUB 0x1a //Substitute 置換
#define EOF 0x1a //End of File MS-DOSにおけるテキストファイルの終端文字//Windowsのテキストファイル終端にはない
#define ESC 0x1b //Escape 拡張 エスケープ
#define FS 0x1c //File Separator ファイル分離
#define GS 0x1d //Group Separator グループ分離
#define RS 0x1e //Record Separator レコード分離
#define US 0x1f //Unit Separator ユニット分離
#define SPC 0x20 //Space 空白 スペース
#define DEL 0x7F //Delete 削除 デリート
・改行コード
タイプライタ時代からの歴史的経緯から改行コードはシステムによりことなる。 プログラムで\nと書いた場合、この改行コードは
システム(コンパイラ)により それぞれLINUXはLF(0x0A)に、WindowsはCR(0x0D) + LF(0x0A)に、Macintoshは CR(0x0D)に
コンパイルされる。
① UNIX、LINUX : LF(0x0A)
② MS-DOS、 Windows : CR(0x0D) + LF(0x0A)
③ Macintosh : CR(0x0D)
以下に Windowsのアクセサリとして付属している、メモ帳で作成したてテキストファイルをバイナリーエディタ(スターリング)でみた結果を示す。
メモ帳での表示 | バイナリーエディタでの見た場合 | 備考 | |
Windows標準の 「メモ帳」で 作成したテキストファイル |
改行コードが 0x0D + 0x0Aである ことがわかる。 |
■ JIS漢字コード
■ 文字サイズ
すべて2バイトで構成されている文字コードセットです。1バイトのANK文字はふくまれて いません。
■ JIS化された漢字のコードセットです。現在は①のJIS拡張漢字コードが主流となってきている。
2000年以前は②③が使用されていたこともあり今でも各方面で②③は使用されている。
■ Microsoftは、2007年に発売したWindows Vistaから、標準搭載フォントの字形を旧来のJIS X 0208:1990のものから、JIS
X 0213:2004のものに変更した
① JIS拡張漢字コード(JIS X 0213:2004)
・ 符号化文字集合を規定している規格である。
・ Unicode3.2版(2002年3月制定から ユニコードに正式採用されている。
・ 11,233文字から構成されています。
・ JIS X 0212がJIS X 0208にない文字を集めた文字集合であるのに対し、JIS X 0213はJIS X 0208を包含し更に第3・第4水準
漢字などを加えた上位集合となっています。
・ 第3水準漢字数は1908文字、第4水準漢字2436字である。
・ JIS X 0213の代表的な符号化方式(注)としては、下記4つがある。
1. ISO-2022-JP-2004
2. Shift_JIS-2004
3. EUC-JIS-2004
4. UTF-8
(注) 文字符号化方式とは、符号化文字集合で文字に対応付けた非負整数値を、実際にコンピュータが利用できるデータ列(通常、バイト列)に変換する符号化方式。
② JIS基本漢字コード(JIS X 0208:1990)
・ 正式名称は「7ビット及び8ビットの2バイト情報交換用符号化漢字集合」です。
・ 第1、第2バイトとも 16進数表記で 0x21~0x7Eの範囲で定義されており、94×94 = 8,836 の文字を表すことができる領域が確保
されています。
・ 1990年版では6,879文字及び図記号から構成されています。。第1バイトの 0x30 からは第1水準漢字 2,965文字、第1バイトの0x 50
からは 第2水準漢字 3,390文字 が規定されています。
③ JIS補助漢字コード(JIS X 0212:1990)
・ 正式名称は「情報交換用漢字符号―補助漢字」です。
・ JIS X 0208に含まれていないもので、日常の国語の文章の表記に用いる文字として必要だと思われる文字が収録されています。
・ 6,067字の文字が規定されています。漢字は第3水準、第4水準会わせ5801文字で構成されています。
・ Unicode2.1から採用されった。。
・ OSとしては、WindowsNT4.0、2000、XP、Vistaに採用されています。但し、実際に使用できるためにはアプリケーション側での適応が
必要です。
■ JIS漢字コード2
文字集合に係る主なJIS | |||||||||||||||||||||||||||||||||
|
■ シフトJIS → 一覧
MS-DOSの時代にできた『符号化方式』で、JIS X 0201(ANK文字)を1バイトで、JIS X 0208(第1水準漢字、第2水準漢字)を2バイトで符号化する可変幅文字符号化方式。 2バイト文字は、第1バイトに0x81-0x9Fまたは0xE0-0xEFの47通り、第2バイトに0x40-0x7Eまたは0x80-0xFCの188通りを用いる。 下記の長所①②③と云った点からCPUリソースの小さい組み込みマイコンとPC間や通信の相手が特定できる場合の通信用”漢字コードセット”として、シフトJISの文字コードセットはきわめて有用である。 |
<長所>
① 2バイトの全角文字と、1バイトのJIS X 0201で定義したいわゆる半角カナ文字を同一のコード体系で表現できる。
② エスケープシーケンスなしで漢字を2バイトで表現できる
③ MS-DOS時代の漢字ROMなど膨大なハード、ソフトの技術資産がある。
④ 以前は シフトJIS文字コードセットに方言が多く混乱した時代があったが最近はSift-JIS 2004(IANA(アイアナ):Internet
Assigned
Numbers Authority)が制定されるなど統一化&規格化が進んできている。
⑤ 以前は、全角文字は、JIS X 0208の6,879文字(内訳:第1水準漢字2,965文字、第2水準漢字3,390文字を中心として、ひらがな、
カタカナ、各種記号や、ギリシャ文字、キリル文字などの非漢字524字)であったが、Sift-JIiS 2004からは4,354文字(内訳:第3水準
文字1,259字、第4水準漢字2,346字記号659字)が追加され11,233文字となった。
<欠点>
① 半角カナを1バイト領域に確保していることからインターネットなどグローバルな通信で使用すると問題が発生する。
② 2バイト目にASCIIコードと同じ0x80以下が現れるので文字列後部から判読しずらい。
③ 0x5C(\バックスラッシュ、¥に相当)が漢字の2バイト目に使用されている。CやPerlなどでは0x5Cはエスケープシーケンス(予約語)に
使用されている。 シフトJISを想定していないプログラミング環境で問題が発生する。
④ JIS X 0208(JIS 漢字コード)は表示できるが 補助漢字は表示できない。
⑤ 方言が沢山ある。(IBM PC-DOS Code、NEC MS-DOS Code、Microsoft Windows Code-Japanese
Shift JIS)
<シフトJISで使われている値>
シフトJISで使われている値は下表の■部分です。
1バイト目
0x81~0x9f, 0xe0~0xfc
|
2バイト目
0x40~0x7e, 0x80~0xfc
|
■ ISO/IEC 10646
・ ISO/IEC 10646 (UCS; 英: Universal Coded Character Set) は、符号化文字集合や文字符号化方式などを定めた、文字コードの国際標準のひとつで、業界規格のUnicodeと概ね互換である。日本の対応規格はJIS X 0221(国際符号化文字集合)。 | |||
・ この規格は制定の一歩手前の段階までは、現在の姿とはかなり異なる仕様だった。 1990年に国際標準の一歩前の段階のDIS (Draft International Standard) として作成されたが、1991年6月の投票で否決された。その理由は、同じ時期にアメリカの企業群がUnicode仕様を作成したため、同じ目的の規格が2つ作られることを避けることだった。その後、DIS 10646とUnicodeとを一本化する作業が行われた。 |
■ JIS X 0221
・ ISO/IEC 10646の国際一致規格である。 規格の名称は「国際符号化文字集合 (UCS)」 | |||
■ ユニコード
■ 要約
<特徴>
・ 符号化文字集合や文字符号化方式などを定めた、文字コードの業界標準規格である。 国際規格 ISO/IEC 10646と概ね互換である。
・ 一つの文字に対して、全世界で重複のない、ユニークな文字コードが設定されている。
・ Unicode(ユニコード)は、符号化文字集合や文字符号化方式などを定めた、文字コードの業界標準規格。
・ 国際規格のISO/IEC 10646とUnicode規格は同じ文字コード表になるように協調して策定されている。
・ JIS漢字の第一 ~ 第四水準のすべての漢字は CJK統合漢字 すなわち、ユニコードに登録されている。
<歴史・現在> 現時点(2023年.5月)のユニコード(Ver.15 → URL) 、 最新Unicode → http://www.unicode.org/versions/latest/.
・ ゼロックス、マイクロソフト、IBM、サンマイクロシステムなどがUnicodコンソーシアムをつくり開発を進めた。
・ 現時点(2023年)では、Unicode 第15.0.0 版 ISO/IEC 10646:2022 収録文字数:143,924 語
<文字サイズ> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
・ 当初、16ビット(2バイト)に世界の文字を収めることで始まった。 2バイトには入りきらないので 32ビット(4バイト)にする案の時期もあったが、最終的に
21ビットとなった。 21ビットの文字サイズでは、コンピュータでは扱いにくいので、コンピュータで扱いやすいバイト列に変換(文字符号化CES: Character Encoding Scheme)して利用することとなった。 21ビット、すなわち 0x000000 ~0x10FFFF の中に世界の全文字が収録されている。 → (Unicode符号化文字集合のU+0000〜U+10FFFFの各符号位置に、Unicodeスカラ値という非負整数値を対応付けている) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
・ 2バイト(65536文字)の収納領域を面と呼び、17面の構成となっている。 特殊な文字を除き、BMP(基本多言語面)と呼ばれる面の中に世界で日常使用される文字が入っている。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<構成> Unicode 15.0 ( 2023年現在) ・ ユニコード一覧 → URL ・ 文字のスカラー値を検索 or スカラー値から文字を検索 → URL |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<日本語>
・ JIS漢字コードは Unicode 第3.2版(2002年3月制定)からJIS X 0213が正式採用されている。JIS X 0213の一部の漢字はサロゲートペア
方式の拡張領域に配置されている。OSとアプリケーションが共に対応していないと表示できない。
・ JIS X 0213は CJK(Chinese-Japanes-Korean)統合漢字の一部となっている。
・ ANKコード(JIS半角英数カナ文字コード:JIS X 0201)は当然ながらは採用されていない。したがって 半角カタカナ、半角円記号\、半角
オーバーバー ̄はUnicodeには存在しない。
<OS>
・ NT4.0、Windows2000、XP、Vista、Mac、Linuxの内部で採用されている。
・ WindowsはシフトJISコードからUnicodeへの転換期にある。
<ファイルの読み書き>
・プログラムはシフトJISのファイルを呼び出すとき、すまわちメモリにロードする時Unicodeに変換している。Unicodeで処理を行い、ファイルに
書き込む時はシフトJISに変換してファイルしている。
<コードセットの調べ方>
・ Unicode Consortiumの URL : Unihan Database で調べることができる。
<ユニコード スカラー値 表記>
ユニコードの文字表記であることを明記する場合は、16進文字の前に ” U+ ”をつける。(例 及び下表参照)
例 あ : U+3042
<ユニコードの例>
数値の表記は、decimalを除きすべて16進数表記です。尚、decimalは10数表記です。
文字 ( )内の文字は表示されません |
ユニコード スカラー値 |
decimal | UTF-8 | UTF-16 | UTF-32 | 備考 |
あ | U+3042 | 12354 | E3 81 82 | 3042 | 00003042 | ひらがな |
い | U+3044 | 12356 | E3 81 84 | 3044 | 00003044 | ひらがな |
う | U+3046 | 12358 | E3 81 86 | 3046 | 00003046 | ひらがな |
東 | U+6771 | 26481 | E6 9D B1 | 6771 | 00006771 | 漢字 |
京 | U+4EAC | 20140 | E4 BA AC | 4EAC | 00004EAC | 漢字 |
都 | U+90FD | 37117 | E9 83 BD | 90FD | 000090FD | 漢字 |
A | U+41 | 65 | 41 | 0041 | 00000041 | アルファベット |
B | U+42 | 66 | 42 | 0042 | 00000042 | アルファベット |
C | U+43 | 67 | 43 | 0043 | 00000043 | アルファベット |
0 | U+30 | 48 | 30 | 0030 | 00000030 | 数字 |
1 | U+31 | 49 | 31 | 0031 | 00000031 | 数字 |
2 | U+32 | 50 | 32 | 0032 | 00000032 | 数字 |
(NULL) | U+0 | 0 | 00 | 0000 | 00000000 | ヌル:0x00、制御文字、非表示 |
(STX) | U+1 | 1 | 01 | 0001 | 00000001 | 制御文字、非表示 |
(SOT) | U+2 | 2 | 02 | 0002 | 00000002 | 制御文字、非表示 |
(LF) | U+A | 10 | A | 000A | 000000A | 制御文字、非表示、Line Feed 改行 |
(VT) | U+B | 11 | B | 000B | 0000000B | 制御文字、非表示、Vertical Tabulation 垂直タブ |
(FF) | U+C | 12 | C | 000C | 0000000C | 制御文字、非表示、Form Feed 改ページ |
# | U+0023 | 35 | 23 | 0023 | 00000023 | 特殊記号 |
% | U+0025 | 37 | 25 | 0025 | 00000025 | 特殊記号 |
\ | U+005C | 92 | 5C | 005C | 0000005C | 特殊記号、バックスラッシュ:0x5C |
<私用領域、私用文字、私用面> | |
Unicodeでは、当事者間の私的な合意によって文字(外字)を定義できる私用領域 (英: Private Use Area, PUA)が用意されている。規格としては、この範囲にいかなる文字も規定していない。私用領域の内容を定義するものとしては、ISOやユニコードコンソーシアム以外の個人、組織およびソフトウェアベンダが想定されている。私用領域に定義された文字を私用文字という。私用領域としては、基本多言語面のU+E000–U+F8FF (57344–63743) と第15面および第16面 (U+F0000–U+10FFFF) が用意されている。このうち、私用領域だけに使われる面(すなわち、第15面と第16面)を私用面という。 |
■サロゲートペア
<サロゲートペア概要> | |||||||||||||||||||||||||||||||||||||
・ 「1文字=2バイト」の基本は維持しつつ、一部の文字については「1文字=4バイト」にする方法です。 | |||||||||||||||||||||||||||||||||||||
・ 未使用の2バイト+2バイト で4バイトの文字コードを設定し、文字コード数不足に対応することとなった。 この4バイトの文字はサロゲート文字と命名された。 また2つの2バイトのペアはサロゲートペアと命名された。 ・ サロゲート文字の漢字は 第2面(追加漢字面と呼ばれる) 及び第3面の 65536文字スペースの中に収録されています。 下図参照 |
|||||||||||||||||||||||||||||||||||||
・ サロゲートペア(Surrogate Pair:代理ペア)と呼ばれる予備バイトを使用した2バイトのペアをBMP(Basic Multilingual Plane)面に 1,048,576(=1024×1024)個つくり各ペアに1個の文字を割り当て不足分に割り当てる方式が採用されている。この結果、4バイトの文字が出現してしまうこととなったが 1,112,064(= 256×256 - 1024×2 + 1024×1024)個の文字にUnicodeコードを割り当てることができるようになった。 | |||||||||||||||||||||||||||||||||||||
・ サロゲート文字の文字コードには、BMPと関連する4バイト(32ビット)の文字コードと スカラー値と呼ばれる21ビットの文字コードがある。 2つの文字コードには関係式が決められている。 | |||||||||||||||||||||||||||||||||||||
・ UTF-8にサロゲートペアはありません。 | |||||||||||||||||||||||||||||||||||||
<サロゲート文字の上位バイト、及び下位バイト値> | |||||||||||||||||||||||||||||||||||||
具体的には、従来のUnicodeでは未使用のだったBMPの 0xD800~0xDBFF(1024通り)を「上位サロゲート」、0xDC00~0xDFFF(1024通り)を「下位サロゲート」と規定し、「上位サロゲート+下位サロゲート」の4バイトで文字を表現する方法です。 「上位サロゲート」も「下位サロゲート」も従来のUnicodeでは未使用の領域なので、以前のUnicodeの文字コードと重複することはありません。 サロゲート文字(4バイト)の構成: サロゲート文字(4バイト) = 上位サロゲートの2バイト + 下位サロゲートの2バイト = (0xD800~0xDBFF) + (0xDC00~0xDFFF) 下図参照 |
|||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||
<サロゲートペアと21ビットの文字コードの関係> | |||||||||||||||||||||||||||||||||||||
① 21ビットスカラー文字コードから、サロゲートペアへの変換 1. 文字コードから0x10000を引いて1番左の桁を"2"から"1"にする。これをXとする。 2. Xを0x400で割ってその商を0xD800に足す。これを「上位サロゲート」とする。 3. Xを0x400で割ってその剰余を0xDC00に足す。これを「下位サロゲート」とする。 4. 上位サロゲート、下位サロゲートの順番で出力する。 ② サロゲートペアから、21ビットスカラー文字コードへの変換 上位バイトから0xD800を減算したものに0x400を掛けたものと、下位バイトから0xDC00を減算したものを加算する。 この加算結果に0x10000を加算する。
|
(例) 実際のサロゲート文字 | |
■ ユニコード と JIS漢字
・JIS漢字はCJK統合漢字にすべて網羅されている。
JIS漢字(JIS X 2013(2002))は、2002年3月に制定されたUnicode 3.2.0から正式対応となった。
・JIS漢字は JIS X 0213で制定されている。JIS X 0213(2004年)には11,233字が規定されている。
JIS X 0213は、非漢字、JIS第1~第4水準漢字をふくむ上位規格である
制定年 | 第1水準漢字 | 第2水準漢字 | 第3水準漢字 | 第4水準漢字 | 非漢字 | 合計 |
---|---|---|---|---|---|---|
1978年 | 2,965字 | 3,384字 | - | - | 453字 | 6,802字 |
1983年 | 3,388字 | 524字 | 6,877字 | |||
1990年 | 3,390字 | 6,879字 | ||||
1997年 | ||||||
2000年 | 1,249字 | 2,436字 | 1,183字 | 11,223字 | ||
2004年 | 1,259字 | 11,233字 |
・漢字の水準
水準 | 分類 | 内容 |
第1水準漢字 | 使用頻度の高い漢字 | 当用漢字字体表、当用漢字補正案および人名用漢字別表を基本として、 多種の漢字表に共通して出現する文字が選ばれた 都道府県名および市区町村名に使用される漢字は、すべて第1水準に含まれている |
第2水準漢字 | 使用頻度の低い漢字 | |
第3水準漢字 | 日常生活で使われることはほとんどない漢字 | |
第4水準漢字 | 日常生活で使われることはほとんどない漢字 |
■ CJK統合漢字(CJK unified ideographs)
中国語、日本語、朝鮮語、ベトナム語で使用されているの中で漢字(表意文字)のなかで、ユニコードに採用されている漢字。 各漢字に符号が設定されている。
CJK統合漢字 Unicode 15.0(2022年) → 一覧
面 | 範囲 | 名称 | 字数 |
---|---|---|---|
第0面 基本多言語面 (BMP) |
U+4E00 - U+9FFF | CJK Unified Ideographs | 20,992 |
U+3400 - U+4DBF | CJK Unified Ideographs Extension A | 6,592 | |
第2面 追加多言語面 (SIP) |
U+20000 - U+2A6DF | CJK Unified Ideographs Extension B | 42,720 |
U+2A700 - U+2B738 | CJK Unified Ideographs Extension C | 4,154 | |
U+2B740 - U+2B81D | CJK Unified Ideographs Extension D | 222 | |
U+2B820 - U+2CEA1 | CJK Unified Ideographs Extension E | 5,762 | |
U+2CEB0 - U+2EBE0 | CJK Unified Ideographs Extension F | 7,473 | |
第3面 漢字面 (TIP) |
U+30000 - U+3134A | CJK Unified Ideographs Extension G | 4,939 |
U+31350 - U+323AF | CJK Unified Ideographs Extension H | 4,193 | |
合計 | 97,058 |
■ ISO-2022-JP
・ JISコードと呼ばれることもある。
・e-mail等 インターネットなどのグローバルな環境で日本語を使用する場合に使用されている文字符号化方式である。
・「JIS X 0208:1997」に基づく文字符号化方式ことである。
・通称として「JISコード」とも呼ばれている。 シフトJISなどより歴史は古い。JIS X 0208の初版制定は:1978年である。
・学術的なことも考慮したことから、文字集合としてはテン文字集合、国際基準版図形文字なども含まれている。
・ ISO-2022-JPは、JIS X 0213の符号化方式のひとつで、7ビットのみを用いる1バイト文字集合と2バイト文字集合を切り替えて使用する符号化方式である。
(JIS X 0213:2004の附属書2による)
コードレンジ | 通称 | 規格 | 備考 | |
1バイト文字集合 | 0x20 ~ 0x7f | ASCII文字 | ANSI、ISO646 |
|
2バイト文字集合 | 0x2121 ~ 0x747e | JIS漢字 | JIS X 2013 |
■ 文字符号化方式 (CES: Character Encoding Scheme)
文字符号化方式とは、 符号化文字集合で文字に対応付けた非負整数値を、実際にコンピュータが利用できるデータ列(通常、バイト列)に変換する符号化の方式である。 コンピュータや通信の分野では、データをシリアルのバイト列に変換すること、またはその変換規則を「エンコーディング」と呼ぶ。 |
|||||||||||||||||||||||||||||||||||
■ 主なエンコーディングスキーム | |||||||||||||||||||||||||||||||||||
(例)
|
|||||||||||||||||||||||||||||||||||
■ Encodeの意味 | |||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||
■ UTF-8、UFF-16、UTF32
|
■ UTF-8(Unicode Transformation Format) → 「UTF-8コード(BMP面)一覧」
■ 概要 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
・ | UTF-8は、符号化文字集合Unicodeの各文字のCode point(スカラー値)を 8ビット(1バイト)単位(Code unit と呼ぶ)の1バイトから4バイトの可変長バイト列に変換します。 5–6バイトの表現は、ISO/IEC 10646による定義とIETFによるかつての定義で、Unicodeの範囲外を符号化するためにのみ使用する。 Unicodeによる定義とIETFによる最新の定義では、5–6バイトの表現は不正なシーケンスである。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
・ | UTF-8は、Unicodeで定義された符号化文字集合をバイト列に変換する方式の一つです。ASCIIコードと互換性をもたせた規格となっているので、多くのソフトウェアで使われています。 Webサイトで用いられる文字エンコーディングで, Unicode規格であるUTF-8が全体の96.7%を占めています | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
・ | UTF-8の最初の128文字は、ASCIIとまったく同じです。ASCII文字は1バイトで表現されますが、漢字や仮名文字は3バイト、もしくは4で表現されるので、データサイズはUTF-16(2バイト表現)より大きくなります。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
■ Unicode → UTF-8 変換方法 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(2)Unicodeの符号位置(16進数)を 2進数に変換する。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
■ UTF-8 のバイト列 メモ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
・ | 符号化されたバイト列は、バイト順に関わらず左から順に出力する。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
・ | 1バイト目の先頭の連続するビット "1"(その後にビット "0" が1つ付く)の個数で、その文字のバイト数がわかるようになっている。 すなわち、 任意のバイトの先頭ビットが "0" の場合は1バイト文字、 "110" の場合は2バイト文字の先頭バイト、 "1110" の場合は3バイト文字の先頭バイト、 "11110" の場合は4バイト文字の先頭バイト であると判定できる。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
・ | 2バイト目以降はビットパターン "10" で始まり、1バイト目と2バイト目以降では値の範囲が重ならないので、文字境界を確実に判定できる。
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
データをメモリ上に配置する方式のことをいう。多々あるが実際にはビッグエンディアンとリトルエンディアンを理解していればよいと思います。
Windowsは視覚的にわかりにくいリトルエンディアンです。
(1) ビッグエンディアン
メモリ上にデータをならべるとき 上位にデータの上位バイトを順番にならべる方式を云う
(2) リトルエンディアン
メモリ上にデータをならべるとき 下位から順番にデータの上位バイトをならべる方式を云う。
(例) 16進数で0xABCDEFGH をメモリ上、アドレス0x00000000~0x00000003に並べた場合を例にとると下表となる。
アドレス番号 | ビッグエンディアンの場合 (IBM汎用機、Macintosh、Sun Spark、モトローラ MC68000等) |
リトルエンディアンの場合 (インテルX86系、Linux) |
備考 |
0x00000000 | AB | GH | |
0x00000001 | CD | EF | |
0x00000002 | EF | CD | |
0x00000003 | GH | AB |
■ エンコーディングとエンディアン
UTF-16とUTF-32には ビッグエンディアンとリトルエンディアンがある。 送信開始または途中でエンディアンを切り替える場合には文字の
前にバイトオーダーマーク BOM(Byte Order Mark)と呼ばれる識別コードを挿入する。特にBOMがない場合は ビッグエンディアンとされる。
尚、UTF-8には バイト単位でのデータ転送のためエンディアンの区別がない。
エンコーディング | ビッグエンディアン | リトルエンディアン | バイトオーダーマーク BOM |
UTF-16 | UTF-16 BE | UTF-16 LE |
BOM: FEFF (例) BE → LE の場合 FFFE 6B30 6130 6F30 |
UTF-32 | UTF-32 BE | UTF-32 LE |
■ エスケープシーケンス (escape sequence)
・ エスケープシーケンスとは、画面上に文字を出力する際に、文字そのものを出力するのではなく、文字色の変更やカーソルの移動、文字の消去、文字集合の切り替えなど、文字出力の制御を行う特殊な文字列のことである。 | |||||||||||||||||||
・ エスケープシーケンス とは、コンピュータシステムにおいて、通常の文字列では表せない特殊な文字や機能を、規定された特別な文字の並びにより表したもの。 | |||||||||||||||||||
・ エスケープシーケンスの先頭には、エスケープ文字、エスケープコードと呼ばれる文字やコードによって表される。 通常、何がエスケープ文字であるか、またはそうでないかは、前後関係に依存する。
(例) エスケープ文字: \
エスケープコード: ESC
|
|||||||||||||||||||
■ PCからの送信文字
PCから送信されてくる文字は数値でもソースコード上”文字”か”数字”かによって送られてくるデータはことなります。
順番としては以下となります。
・文字列は先頭から順番に1バイトづつ送られてくる。
・整数は下位バイトから上位バイトへと順番に1バイトづつ送られてくる。
以下に、PCからPICへRS232Cで送られてくるデータをPIC側液晶に表示した例を紹介します。
★ 液晶には1バイトのデータを文字 %Cで表示したものと、16進数 %Xで表示したものが2つ表示されています。
★ 0= 、 1= 、 2=、 3= はそれぞれ1番目、2番目、3番目、4番目にPICに送られてきたデータをあらわします。
//------------------------------------------------------------------------------------------- (1)文字”a”の送受信 <PIC側受信プログラム部> #INT_RDA void rs232c() { buf[0] = getc(); lcd_clear(); printf(lcd_data,"0=%c %x",buf[0],buf[0]); } <PC側送信プログラム部>
char x = 'a'; sprintf(buf,"%c",x); szStr = &buf[0]; nNumberOfBytesToWrite = strlen(szStr); Ret = WriteFile( //データの送信 hPort, // 通信デバイスのハンドル:CreateFile()で取得したハンドルを指定 szStr,// 送信データのポインタを指定 nNumberOfBytesToWrite, // 送信するデータのバイト数を指定 &nNumberOfBytesWritten, // 実際に送信されたバイト数が格納されるポインタを指定 NULL // 通信とは関係ない引数なのでNULLを指定 );
//----------------------------------------------------------------------------- (2)文字”2”の送受信 <PIC側受信プログラム部> #INT_RDA void rs232c() { buf[0] = getc(); lcd_clear(); printf(lcd_data,"0=%c %x",buf[0],buf[0]); } <PC側送信プログラム部> int x = 2; sprintf(buf,"%d",x); szStr = &buf[0]; nNumberOfBytesToWrite = strlen(szStr); Ret = WriteFile( //データの送信 hPort, // 通信デバイスのハンドル:CreateFile()で取得したハンドルを指定 szStr,// 送信データのポインタを指定 nNumberOfBytesToWrite, // 送信するデータのバイト数を指定 &nNumberOfBytesWritten, // 実際に送信されたバイト数が格納されるポインタを指定 NULL // 通信とは関係ない引数なのでNULLを指定 );
//-------------------------------------------------------------------------------- (3)文字”59”の送受信 <PIC側受信プログラム部> #INT_RDA void rs232c() { buf[0] = getc(); lcd_clear(); printf(lcd_data,"0=%c %x",buf[0],buf[0]); } <PC側送信プログラム部> int x = 59; sprintf(buf,"%d",x); szStr = &buf[0]; nNumberOfBytesToWrite = strlen(szStr); Ret = WriteFile( //データの送信 hPort, // 通信デバイスのハンドル:CreateFile()で取得したハンドルを指定 szStr,// 送信データのポインタを指定 nNumberOfBytesToWrite, // 送信するデータのバイト数を指定 &nNumberOfBytesWritten, // 実際に送信されたバイト数が格納されるポインタを指定 NULL // 通信とは関係ない引数なのでNULLを指定 );
//--------------------------------------------------------------------------- (4)文字”456”の送受信 <PIC側受信プログラム部> #INT_RDA void rs232c() { buf[ix] = getc(); if(ix >= 3) { lcd_clear(); printf(lcd_data,"0=%c %x 1=%c %x",buf[0],buf[0],buf[1],buf[1]); lcd_cmd(0xC0);//2行目の先頭へ printf(lcd_data,"2=%c %x 3=%c %x",buf[2],buf[2],buf[3],buf[3]); ix = 0; } ix++; } <PC側送信プログラム部> int x = 456; sprintf(buf,"%d",x); szStr = &buf[0]; nNumberOfBytesToWrite = strlen(szStr); Ret = WriteFile( //データの送信 hPort, // 通信デバイスのハンドル:CreateFile()で取得したハンドルを指定 szStr,// 送信データのポインタを指定 nNumberOfBytesToWrite, // 送信するデータのバイト数を指定 &nNumberOfBytesWritten, // 実際に送信されたバイト数が格納されるポインタを指定 NULL // 通信とは関係ない引数なのでNULLを指定 );
//----------------------------------------------------------------------------------- (5)文字”3456”の送受信 <PIC側受信プログラム部> #INT_RDA void rs232c() { buf[ix] = getc(); if(ix >= 3) { lcd_clear(); printf(lcd_data,"0=%c %x 1=%c %x",buf[0],buf[0],buf[1],buf[1]); lcd_cmd(0xC0);//2行目の先頭へ printf(lcd_data,"2=%c %x 3=%c %x",buf[2],buf[2],buf[3],buf[3]); ix = 0; } ix++; } <PC側送信プログラム部> int x = 3456; sprintf(buf,"%d",x); szStr = &buf[0]; nNumberOfBytesToWrite = strlen(szStr); Ret = WriteFile( //データの送信 hPort, // 通信デバイスのハンドル:CreateFile()で取得したハンドルを指定 szStr,// 送信データのポインタを指定 nNumberOfBytesToWrite, // 送信するデータのバイト数を指定 &nNumberOfBytesWritten, // 実際に送信されたバイト数が格納されるポインタを指定 NULL // 通信とは関係ない引数なのでNULLを指定 );
//-------------------------------------------------------------------------------------------- (6)整数”3456”の送受信 <PIC側受信プログラム部> #INT_RDA void rs232c() { buf[ix] = getc(); if(ix >= 3) { lcd_clear(); printf(lcd_data,"0=%c %x 1=%c %x",buf[0],buf[0],buf[1],buf[1]); lcd_cmd(0xC0);//2行目の先頭へ printf(lcd_data,"2=%c %x 3=%c %x",buf[2],buf[2],buf[3],buf[3]); ix = 0; } ix++; } <PC側送信プログラム部> int x = 3456; Ret = WriteFile( //データの送信 hPort, // 通信デバイスのハンドル:CreateFile()で取得したハンドルを指定 &x, sizeof(int), &nNumberOfBytesWritten, // 実際に送信されたバイト数が格納されるポインタを指定 NULL // 通信とは関係ない引数なのでNULLを指定 );
(6)ショート整数”3456”の送受信 <PIC側受信プログラム部> #INT_RDA void rs232c() { buf[ix] = getc(); if(ix >= 3) { lcd_clear(); printf(lcd_data,"0=%c %x 1=%c %x",buf[0],buf[0],buf[1],buf[1]); lcd_cmd(0xC0);//2行目の先頭へ printf(lcd_data,"2=%c %x 3=%c %x",buf[2],buf[2],buf[3],buf[3]); ix = 0; } ix++; } <PC側送信プログラム部> short int x = 3456; Ret = WriteFile( //データの送信 hPort, // 通信デバイスのハンドル:CreateFile()で取得したハンドルを指定 &x, sizeof(int), &nNumberOfBytesWritten, // 実際に送信されたバイト数が格納されるポインタを指定 NULL // 通信とは関係ない引数なのでNULLを指定 );
//----------------------------------------------------------------------------------- (7)負の整数”3456”の送受信 <PIC側受信プログラム部> #INT_RDA void rs232c() { buf[ix] = getc(); if(ix >= 3) { lcd_clear(); printf(lcd_data,"0=%c %x 1=%c %x",buf[0],buf[0],buf[1],buf[1]); lcd_cmd(0xC0);//2行目の先頭へ printf(lcd_data,"2=%c %x 3=%c %x",buf[2],buf[2],buf[3],buf[3]); ix = 0; } ix++; } <PC側送信プログラム部> int x = -3456; Ret = WriteFile( //データの送信 hPort, // 通信デバイスのハンドル:CreateFile()で取得したハンドルを指定 &x, sizeof(int), &nNumberOfBytesWritten, // 実際に送信されたバイト数が格納されるポインタを指定 NULL // 通信とは関係ない引数なのでNULLを指定 );
//------------------------------------------------------------------------------------------- (8)負のショート整数”3456”の送受信 <PIC側受信プログラム部> #INT_RDA void rs232c() { buf[ix] = getc(); if(ix >= 3) { lcd_clear(); printf(lcd_data,"0=%c %x 1=%c %x",buf[0],buf[0],buf[1],buf[1]); lcd_cmd(0xC0);//2行目の先頭へ printf(lcd_data,"2=%c %x 3=%c %x",buf[2],buf[2],buf[3],buf[3]); ix = 0; } ix++; } <PC側送信プログラム部> short int x = -3456; Ret = WriteFile( //データの送信 hPort, // 通信デバイスのハンドル:CreateFile()で取得したハンドルを指定 &x, sizeof(int), &nNumberOfBytesWritten, // 実際に送信されたバイト数が格納されるポインタを指定 NULL // 通信とは関係ない引数なのでNULLを指定 );
//--------------------------------------------------------------------------------------------- (9)文字列”abcd”の送受信 <PIC側受信プログラム部> #INT_RDA void rs232c() { buf[ix] = getc(); if(ix >= 3) { lcd_clear(); printf(lcd_data,"0=%c %x 1=%c %x",buf[0],buf[0],buf[1],buf[1]); lcd_cmd(0xC0);//2行目の先頭へ printf(lcd_data,"2=%c %x 3=%c %x",buf[2],buf[2],buf[3],buf[3]); ix = 0; } ix++; } <PC側送信プログラム部> sprintf(buf,"abcd"); szStr = &buf[0]; nNumberOfBytesToWrite = strlen(szStr); Ret = WriteFile( //データの送信 hPort, // 通信デバイスのハンドル:CreateFile()で取得したハンドルを指定 szStr,// 送信データのポインタを指定 nNumberOfBytesToWrite, // 送信するデータのバイト数を指定 &nNumberOfBytesWritten, // 実際に送信されたバイト数が格納されるポインタを指定 NULL // 通信とは関係ない引数なのでNULLを指定 );
■ フォント
■ 分類
1. データ形式による分類
1.1 ビットマップフォント
・ ドットの組み合わせで文字を表現したフォント
・ ラスターフォント などとも呼ばれる
1.1.1. ビットマップフォント
・Windowsで使われるフォント
1.1.2. 丸漢フォント
・ Macintosh で使われるフォント
1.1.3. BDF
・ UNIXで使われるフォント
・ Glyph Bitmap Distribution Format の略である。
1.2 スケーラブルフォン
・ 線の位置や形、長さなどで文字の形を表現したフォント
1.2.1. ストロークフォント
・ 線の太さのないフォント
・ CADなどで見かける
・ 表示速度が速い
1.2.2. アウトラインフォント
・ 太さのあるフォント
・ 袋文字フォント などとも呼ばれる
・ 現在のPCで最もよくつかわれている
1.2.2.1 TrueTypeフォント
・ アップルコンピュータとマイクロソフトが共同開発したアウトラインフォントで、ビットマップフォントを埋め込むことも可能である。
・ Windows 、Macintoshで使われているフォント
・ 2次スプライン曲線で制御が行われている。
1.2.2.1 PostScriptフォント
・ アドビシステムズが開発したアウトラインフォントである。
・ Macintosh で使われているフォント
・ 3次べジェ曲線で制御が行われている。
・ 印刷業界でよく使われている。
2. フォント幅による分類
2.1 等幅フォント
・ 文字の字の幅が一定のフォント
2.2 プロポーショナルフォント
・ 文字の幅が文字により違うフォント
■ フォントの拡張子
PC | 拡張子 | 名称 | 備考 |
Windows | ttf | TrueTypeフォント | Windows標準のアウトラインフォント |
otf |
オープンタイプフォント | アウトラインフォント TrueTypeフォントとPostScriptフォントの技術を統合して作られた新しいフォント形式 |
|
ttc | TrueType Collection | アウトラインフォント | |
fon | ビットマップタイプ | Windows標準のビットマップフォント | |
fnt | M.U.G.E.N | ビットマップフォン | |
Macintosh |
■ JIS漢字 フォントグリフ
・01区~94区まである。
・各区には最大94文字のフォントデータが格納される。番号何点と呼ばれる。 (例)"神"はJIS漢字の区点番号が "32区31点"
の漢字である。
・ 漢字がは "亜"から始まり、JIS漢字コードは 0x3021である。
・実際には文字データがないものでもグリフデータはあるものとしてグリフデータのオフセット位置は計算する。
・通常グリフデータはコード順に 0x2121 から 0x747e まで, ベタに書きこまれている。
■ | サンセリフ フォント | ||
サンセリフ(仏: Sans-serif)とは、セリフのない書体 (フォント) の総称である。セリフとは、文字の線の端につけられる線・飾りで、「うろこ」、「ひげ飾り」、「ひげ」とも呼ばれる。 | |||
■ | Noto Sans(読み方:ノトサン) | ||
世界中の言語をサポートすることを目標にGoogleがadobeと共同開発したフォントシリーズのサンセリフバージョン。 | |||